/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model.Dominio;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author ssk
 */
public class Modelo {

    private List<ClienteNatural> clientesNaturales;
    private List<ClienteJuridico> clientesJuridicos;
    private List<Empleado> empleados;
    private List<Servicio> servicios;
    private static Modelo instance = null;

    private Modelo() {
        clientesNaturales = new ArrayList<ClienteNatural>();
        clientesJuridicos = new ArrayList<ClienteJuridico>();
        empleados = new ArrayList<Empleado>();
        servicios = new ArrayList<Servicio>();
    }

    public static Modelo getInstance() {
        if (instance == null) {
            instance = new Modelo();
        }

        return instance;
    }

    public boolean agregarClienteNatural(ClienteNatural clienteNatural) {
        if (!clientesNaturales.contains(clienteNatural)) {
            clientesNaturales.add(clienteNatural);
            return true;
        } else {
            return false;
        }
    }

    public ClienteNatural buscarClienteNatural(int cedula) {
        for (ClienteNatural clienteNatural : clientesNaturales) {
            if (clienteNatural.getCedula() == cedula) {
                return clienteNatural;
            }
        }
        return null;
    }

    public void modificarClienteNatural(ClienteNatural clienteNatural) {
        removerClienteNatural(clienteNatural);
        agregarClienteNatural(clienteNatural);
    }

    public void removerClienteNatural(ClienteNatural clienteNatural) {
        clientesNaturales.remove(clienteNatural);
    }

    public boolean agregarClienteJuridico(ClienteJuridico clienteJuridico) {
        if (!clientesJuridicos.contains(clienteJuridico)) {
            clientesJuridicos.add(clienteJuridico);
            return true;
        } else {
            return false;
        }
    }

    public ClienteJuridico buscarClienteJuridico(String rif) {
        for (ClienteJuridico clienteJuridico : clientesJuridicos) {
            if (clienteJuridico.getRif() == null ? rif == null : clienteJuridico.getRif().equals(rif)) {
                return clienteJuridico;
            }
        }
        return null;
    }

    public void modificarClienteJuridico(ClienteJuridico clienteJuridico) {
        removerClienteJuridico(clienteJuridico);
        agregarClienteJuridico(clienteJuridico);
    }

    public void removerClienteJuridico(ClienteJuridico clienteJuridico) {
        clientesJuridicos.remove(clienteJuridico);
    }

    public boolean agregarEmpleado(Empleado empleado) {
        if (!empleados.contains(empleado)) {
            empleados.add(empleado);
            return true;
        } else {
            return false;
        }
    }

    public Empleado buscarEmpleado(int cedula) {
        for (Empleado empleado : empleados) {
            if (empleado.getCedula() == cedula) {
                return empleado;
            }
        }
        return null;
    }

    public void modificarEmpleado(Empleado empleado) {
        removerEmpleado(empleado);
        agregarEmpleado(empleado);
    }

    public void removerEmpleado(Empleado empleado) {
        empleados.remove(empleado);
    }

    public void agregarServicio(Servicio servicio) {
        if (!servicios.contains(servicio)) {
            servicios.add(servicio);
        }
    }

    public Servicio buscarServicio(int numeroDelServicio) {
        for (Servicio servicio : servicios) {
            if (servicio.getNumeroDelServicio() == numeroDelServicio) {
                return servicio;
            }
        }
        return null;
    }

    public void removerServicio(Servicio servicio) {
        servicios.remove(servicio);
    }

    /**
     * Esta funcion remueve todos los servicios que ya hayan sido finalizados
     * recorre la lista servicios y revisa si el servicio ya se cumplio
     * en caso que se haya cumplido lo remueve.
     */
    public void removerServiciosFinalizados() {
        for (Servicio servicio : servicios) {
            if (!servicio.isEstadoDelServicio()) {
                removerServicio(servicio);
            }

        }
    }
}
